#include <iostream>
#include <cmath>
#include <queue>
#include <cstring>
using namespace std;
const int N=2e5+10,M=4e5+10;
int e[M],ne[M],idx,h[N];
int ans[N];
int c[N];
int dis[N];
void add(int a,int b)
{
	e[idx]=b;
	ne[idx]=h[a];
	h[a]=idx;
	idx++;
}

int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n;
		scanf("%d",&n);
		for(int i=0;i<n;i++)
		{
			scanf("%d",c+i);
			dis[c[i]]=n;
			h[c[i]]=-1;
		}
		for(int i=0,a,b;i<n-1;i++)
		{
			scanf("%d %d",&a,&b);
			add(a,b);
			add(b,a);
		}
		int ans=n;
		for(int i=0;i<n;i++)
		{
			ans=min(ans,dis[c[i]]);
			if(i!=0) cout<<ans<<' ';
			dis[c[i]]=0;
			queue<int> q;
			q.push(c[i]);
			while(q.size()>0)
			{
			
				int t=q.front();
				q.pop();
				for(int i=h[t];i!=-1;i=ne[i])
				{
					int a=e[i];
					if(dis[t]+1<dis[a] && dis[t]+1<ans)
					{
						dis[a]=dis[t]+1;
						q.push(a);
					}
				}
			}
		}
		cout<<endl;
		idx=0;
	}
	return 0;
}
